import sys
import os
import argparse
import shutil



def get_gpt_sovits_tts_audio(input_text_path:str,output_audio_path:str,resource_dir_path:str):
    process_dir_path = os.path.dirname(output_audio_path)
    tmp_dir_path = os.path.join(process_dir_path,"tmp_gs_tts")
    if os.path.exists(tmp_dir_path):
        shutil.rmtree(tmp_dir_path)
    os.makedirs(tmp_dir_path)
    input_txt_path = os.path.join(tmp_dir_path,"input.txt")
    output_wav_path = os.path.join(tmp_dir_path,"output.wav")
    source_txt_file_name = os.path.basename(input_text_path)
    shutil.copy(input_text_path,input_txt_path)
    cmd = "gs_tts_predict {} {}".format(resource_dir_path,tmp_dir_path)
    print(cmd)
    output = os.system(cmd)
    print(output)
    output_audio_file_path = os.path.join(process_dir_path,source_txt_file_name.replace(".txt",".wav"))
    if os.path.exists(output_wav_path):
        shutil.copy(output_wav_path,output_audio_file_path)
    if not os.path.exists(output_wav_path):
        return False,"生成语音失败"
    return True,output_wav_path


def batch_tts(txt_dir, audio_dir,speaker_resource_dir):
    # 检查输入目录是否存在
    if not os.path.exists(txt_dir):
        print("输入目录不存在")
        return
    
    # 检查输出目录是否存在，如果不存在则创建
    if not os.path.exists(audio_dir):
        os.makedirs(audio_dir)
    
    # 遍历输入目录中的所有txt文件
    file_arr = os.listdir(txt_dir)
    file_arr.sort()
    for file_name in file_arr:
        if file_name.endswith(".txt"):
            # 构建输入文件路径和输出文件路径
            input_txt_path = os.path.join(txt_dir, file_name)
            output_audio_path = os.path.join(audio_dir, os.path.splitext(file_name)[0] + ".wav")
            get_gpt_sovits_tts_audio(input_txt_path,output_audio_path,speaker_resource_dir)




if __name__  == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--txt_dir", type=str, required=True, help="txt文件夹")
    parser.add_argument("--audio_dir", type=str, required=True, help="语音文件夹")
    parser.add_argument("--speaker_resource_dir", type=str, required=True, help="说话者的声音资源文件夹")
    args = parser.parse_args()
    batch_tts(args.txt_dir,args.audio_dir,args.speaker_resource_dir)